% !Mode:: "TeX:UTF-8"

\chapter{系统设计}

\section{模块设计}
服务器主要分为allData, equipment两部分，由其中的entity，service，controller，DAO与.xml 文件组成。类图如下图 图 4-1 所示。此类图由伍思睿同学完成。

\begin{figure}[htbp]
        \centering
        \includegraphics[width=1\textwidth]{picture/module}
        \caption{类图}\label{fig:module}
        \vspace{\baselineskip}
\end{figure}

\section{数据库设计}
数据库设计使用ER图展示，如图 4-2 所示。

\begin{figure}[htbp]
        \centering
        \includegraphics[width=0.8\textwidth]{picture/er}
        \caption{ER图}\label{fig:er}
        \vspace{\baselineskip}
\end{figure}


\section{接口设计}
\begin{lstlisting}
1.get：
localhost:8080/allData/equipment .
2.get：
localhost:8080/allData/getByTimeBucket?startTime=2019-03-05_13:00:00&endTime=2019-03-05_13:10:00 .
3.get：
localhost:8080/allData/getByMacAddress/M8613000001111
4.put:
localhost:8080/allData/update?macAddress=M8613000001111&updateInterval=30  
5.post:
localhost:8080/allData/add
6.delete:
localhost:8080/allData/delete/1833255086
\end{lstlisting}
1是查询设备的信息（名字与mac地址）。2是查询时间段内的信息。3是通过mac地址查询这个设备所有的信息。4是更改时间间隔。5是用于树莓派上传信息，信息是由json body的形式传入。6是删除时间戳对应的信息。
1-4是由我设计，5-6是由李朋恩同学设计。
        
\section{算法设计}
1：1.1）我在controller部分添加一个全局变量当做更新时间间隔的缓存，用map数据类型，存储mac地址与更新时间间隔这一键值对。
1.2）在新增信息的时候会判断map里是否为空，为空就插入，这是防止覆盖更改更新时间间隔操作。
1.3）更改更新时间间隔就是在put中进行查找并更改。代码见第5章第1部分。
2：在新增信息的时候，生成设备对象，同时对设备进行新增。代码见第5章第2部分。
